U:;$^	
:REGISTER=$$$;
:TOP;
@	TITLE@	'8086 TINCMP CMPLR[CP/M 1.1]';
@	PAGEWIDTH 79;
@	NAME@	'MAINPROG';
@	EXTRN@	MSG@:NEAR,OPENIO@:NEAR,CLOSEIO@:NEAR,RNX@:NEAR;
@	EXTRN@	WNX@:NEAR,STOP@:NEAR,BREAD@:NEAR,BWRITE@:NEAR;
@	EXTRN@	INITIAL@:NEAR,ENDING@:NEAR,STOP@:NEAR,ATTACH@:NEAR;
@	EXTRN@	ASSOC@:NEAR;
DATA@	DSEG;
:LOMEM=$$$$$;
:HIMEM=$$$$$;
:PARAMETER K$$=$$$;
KA0^P1C^P2C@	EQU@	^V3S^V4*^V5*^!0N;
:MS '$$$$$$$$$';
@	CALL@	MSG;
@	DB@	'^P1C^P2C^P3C^P4C^P5C^P6C^P7C^P8C^P9C';
:GOSUB $$;
@	CALL@	SA0^P1C^P2C;
:GOTO $$;
@	JMP@	LOC^P1C^P2C;
:BYTE $$;
BA0^P1C^P2C@	RB@	1;
:BYTE $$($$$);
BA0^P1C^P2C@	RB@	^V3S^V4*^V5*^!0N;
:BYTE $$($$$$$);
BA0^P1C^P2C@	RB@	^V3S^V4*^V5*^V6*^V7*^!0N;
:INT I$$;
WA0^P1C^P2C@	RW@	1;
:INT I$$($$$);
WA0^P1C^P2C@	RW@	^V3S^V4*^V5*^!0N;
:INT I$$($$$$$);
WA0^P1C^P2C@	RW@	^V3S^V4*^V5*^V6*^V7*^!0N;
:$$=+K$$;
@	MOV@	BA0^P1C^P2C,KA0^P3C^P4C;
:$$=+$$$;
@	MOV@	BA0^P1C^P2C,^V3S^V4*^V5*^!0N;
:$$='$';
@	MOV@	BA0^P1C^P2C,'^P3C';
:I$$=+$$$;
@	MOV@	WA0^P1C^P2C,^V3S^V4*^V5*^!0N;
:I$$=+$$$$$;
@	MOV@	WA0^P1C^P2C,^V3S^V4*^V5*^V6*^V7*^!0N;
:$$=$$;
@	MOV@	AL,BA0^P3C^P4C;
@	MOV@	BA0^P1C^P2C,AL;
:$$++;
@	INC@	BA0^P1C^P2C;
:$$--;
@	DEC@	BA0^P1C^P2C;
:I$$=$$;
@	MOV@	BH,0;
@	MOV@	BL,BA0^P3C^P4C;
@	MOV@	WA0^P1C^P2C,BX;
:I$$=I$$;
@	MOV@	BX,WA0^P3C^P4C;
@	MOV@	WA0^P1C^P2C,BX;
:$$=$$($$);
@	MOV@	BL,BA0^P5C^P6C;
@	MOV@	BH,0;
@	MOV@	AL,BA0^P3C^P4C[BX];
@	MOV@	BA0^P1C^P2C,AL;
:I$$=I$$($$);
@	MOV@	BL,BA0^P5C^P6C;
@	MOV@	BH,0;
@	SHL@	BX,1;
@	MOV@	AX,WA0^P3C^P4C[BX];
@	MOV@	WA0^P1C^P2C,AX;
:$$=$$(I$$);
@	MOV@	BX,WA0^P5C^P6C;
@	MOV@	AL,BA0^P3C^P4C[BX];
@	MOV@	BA0^P1C^P2C,AL;
:I$$=I$$(I$$);
@	MOV@	BX,WA0^P5C^P6C;
@	SHL@	BX,1;
@	MOV@	AX,WA0^P3C^P4C[BX];
@	MOV@	WA0^P1C^P2C,AX;
:$$($$)=$$;
@	MOV@	AL,BA0^P5C^P6C;
@	MOV@	BL,BA0^P3C^P4C;
@	MOV@	BH,0;
@	MOV@	BA0^P1C^P2C[BX],AL;
:$$(I$$)=$$;
@	MOV@	AL,BA0^P5C^P6C;
@	MOV@	BX,WA0^P3C^P4C;
@	MOV@	BA0^P1C^P2C[BX],AL;
:I$$($$)=I$$;
@	MOV@	AX,WA0^P5C^P6C;
@	MOV@	BL,BA0^P3C^P4C;
@	MOV@	BH,0;
@	SHL@	BX,1;
@	MOV@	WA0^P1C^P2C[BX],AX;
:I$$(I$$)=I$$;
@	MOV@	AX,WA0^P5C^P6C;
@	MOV@	BX,WA0^P3C^P4C;
@	SHL@	BX,1;
@	MOV@	WA0^P1C^P2C[BX],AX;
:$$=$$+$$;
@	MOV@	AL,BA0^P5C^P6C;
@	ADD@	AL,BA0^P3C^P4C;
@	MOV@	BA0^P1C^P2C,AL;
:$$=$$-$$;
@	MOV@	AL,BA0^P3C^P4C;
@	SUB@	AL,BA0^P5C^P6C;
@	MOV@	BA0^P1C^P2C,AL;
:$$=$$&$$;
@	MOV@	AL,BA0^P3C^P4C;
@	AND@	AL,BA0^P5C^P6C;
@	MOV@	BA0^P1C^P2C,AL;
:$$=$$?$$;
@	MOV@	AL,BA0^P3C^P4C;
@	OR@	AL,BA0^P5C^P6C;
@	MOV@	BA0^P1C^P2C,AL;
:I$$++;
@	INC@	WA0^P1C^P2C;
:I$$--;
@	DEC@	WA0^P1C^P2C;
:I$$=-I$$;
@	MOV@	AX,WA0^P3C^P4C;
@	NEG@	AX;
@	MOV@	WA0^P1C^P2C,AX;
:I$$=I$$+I$$;
@	MOV@	AX,WA0^P3C^P4C;
@	ADD@	AX,WA0^P5C^P6C;
@	MOV@	WA0^P1C^P2C,AX;
:I$$=I$$-I$$;
@	MOV@	AX,WA0^P3C^P4C;
@	SUB@	AX,WA0^P5C^P6C;
@	MOV@	WA0^P1C^P2C,AX;
:I$$=I$$*I$$;
@	MOV@	AX,WA0^P3C^P4C;
@	IMUL@	WA0^P5C^P6C;
@	MOV@	WA0^P1C^P2C,AX;
:I$$=I$$/I$$;
@	MOV@	AX,WA0^P3C^P4C;
@	MOV@	CX,WA0^P5C^P6C;
@	CWD;
@	JCXZ@	@$+4;
@	IDIV@	CX;
@	MOV@	WA0^P1C^P2C,AX;
:$$=$$==$$;
@	MOV@	AL,BA0^P3C^P4C;
@	CMP@	AL,BA0^P5C^P6C;
@	MOV@	AL,1;
@	JZ@	@$+4;
@	MOV@	AL,0;
@	MOV@	BA0^P1C^P2C,AL;
:$$=$$=!$$;
@	MOV@	AL,BA0^P3C^P4C;
@	CMP@	AL,BA0^P5C^P6C;
@	MOV@	AL,1;
@	JNZ@	@$+4;
@	MOV@	AL,0;
@	MOV@	BA0^P1C^P2C,AL;
:$$=$$<=$$;
@	MOV@	AL,BA0^P3C^P4C;
@	CMP@	AL,BA0^P5C^P6C;
@	MOV@	AL,0;
@	JNBE@	@$+4;
@	MOV@	AL,1;
@	MOV@	BA0^P1C^P2C,AL;
:ENDSUB;
@	RET;
:RETURN;
@	RET;
:STOP $;
@	MOV@	AL,^P1C;
@	CALL@	STOP;
:LOC $$;
LOC^P1C^P2C@:;
:ENDMAIN;
@	CALL@	ENDING;
@	MOV@	CL,0;
@	INT@	224;

:IF $$;
@	MOV@	AL,BA0^P1C^P2C;
@	TEST@	AL,AL;
@	JNZ@	@$+5;
@	JMP@	IF0^U0S^S0N;
:ELSE;
@	JMP@	IF0^U0P^P0N^!9P;
IF0^P9N@:;
^P0S
:ENDIF;
IF0^!0N@:;
:CALL $$;
@	CALL@	SA0^P1C^P2C;
:;
:BOTTOM;
@	END@	START;
:READ $$ FROM $$;
@	MOV@	BX, OFFSET BA0^P1C^P2C;
@	MOV@	DX, OFFSET BA0^P3C^P4C;
@	CALL@	BREAD;
:WRITE $$ INTO $$;
@	MOV@	BX, OFFSET BA0^P1C^P2C;
@	MOV@	DX, OFFSET BA0^P3C^P4C;
@	CALL@	BWRITE;
:BEGINMAIN($$,I$$);
BA0^P1C^P2C@	RB@	1;
WA0^P3C^P4C@	RW@	1;
IOCTRL@	DSEG@	COMMON;
IAV@	DW@	0;
BA0ER@	DB@	0;
@	CSEG;
START@:@	CALL@	INITIAL;
@	MOV@	AX,IAV;
@	MOV@	BA0^P1C^P2C,AL;
:CLOSE $$;
@	MOV@	DX, OFFSET BA0^P1C^P2C;
@	CALL@	CLOSEIO;
:WHILE;
	^U0STW0^S0N@:;
:ON $$;
	@	MOV@	AL,BA0^P1C^P2C;
	@	TEST@	AL,AL;
	@	JNZ@	@$+5;
	@	JMP@	BW0^S0N;
:ENDWHILE;
	@	JMP@	TW0^S0N;
	BW0^!0N@:;
:CHOOSE ON $$;
	@	MOV@	AL,BA0^P1C^P2C^U0S^N3S^U1S;
:DEFAULT;
	^!0P^!9P^!8P
	@	JMP@	XA0^P0N;
	@	RB@	0-^P9N;
	A0U^P8N@:;
	^P0S
:ENDCHOOSE;
	XA0^!0N@:;
:SUB $$;
	SA0^P1C^P2C@:;
:CASE $$;
	^!0P^!9P^!8P
	@	JMP@	XA0^P0N;
	@	RB@	0-^P9N;
A0U^P8N@:@	CMP@	AL,BA0^P1C^P2C;
	@	JZ@	@$+5;
	@	JMP@	A0U^U1S^S8N^N0S^P0S;
:ASSOCIATE FCB $ WITH I$$;
	@	MOV@	AL,^P1C;
	@	MOV@	BX, OFFSET WA0^P2C^P3C;
	@	CALL@	ATTACH;
:UNPACK(I$$,$$,$$);
	@	MOV@	AX,WA0^P1C^P2C;
	@	MOV@	BA0^P3C^P4C,AH;
	@	MOV@	BA0^P5C^P6C,AL;
:PACK(I$$,$$,$$);
	@	MOV@	AL,BA0^P5C^P6C;
	@	MOV@	AH,BA0^P3C^P4C;
	@	MOV@	WA0^P1C^P2C,AX;
:$$=I$$;
	@	MOV@	AL,BYTE PTR WA0^P3C^P4C;
	@	MOV@	BA0^P1C^P2C,AL;
:$$=$$!=$$;
	@	MOV@	AL,BA0^P5C^P6C;
	@	CMP@	AL,BA0^P3C^P4C;
	@	MOV@	AL,1;
	@	JNZ@	@$+4;
	@	MOV@	AL,0;
	@	MOV@	BA0^P1C^P2C,AL;
:$$=I$$==I$$;
	@	MOV@	AX,WA0^P5C^P6C;
	@	CMP@	AX,WA0^P3C^P4C;
	@	MOV@	AL,1;
	@	JZ@	@$+4;
	@	MOV@	AL,0;
	@	MOV@	BA0^P1C^P2C,AL;
:WRITE $$;
	@	MOV@	AL,BA0^P1C^P2C;
	@	CALL@	WNX;
:READ $$;
	@	CALL@	RNX;
	@	MOV@	BA0^P1C^P2C,AL;
:OPEN $$ FOR $$ AT I$$;
@	MOV@	DX,OFFSET BA0^P1C^P2C;
@	MOV@	BX,OFFSET BA0^P3C^P4C;
@	MOV@	SI,OFFSET WA0^P5C^P6C;
	@	CALL@	OPENIO;
:$$=$$<!$$;
	@	MOV@	AL,BA0^P3C^P4C;
	@	CMP@	AL,BA0^P5C^P6C;
	@	LAHF;
	@	AND@	AH,1;
	@	MOV@	BA0^P1C^P2C,AH;
:$$=I$$<!I$$;
	@	MOV@	AX,WA0^P3C^P4C;
	@	CMP@	AX,WA0^P5C^P6C;
	@	LAHF;
	@	ROL@	AH,1;
	@	AND@	AH,1;
	@	MOV@	BA0^P1C^P2C,AH;
:$$=I$$<=I$$;
	@	MOV@	AX,WA0^P3C^P4C;
	@	CMP@	AX,WA0^P5C^P6C;
	@	MOV@	AL,1;
	@	JLE@	@$+4;
	@	MOV@	AL,0;
	@	MOV@	BA0^P1C^P2C,AL;
:$$=I$$!=I$$;
	@	MOV@	AX,WA0^P5C^P6C;
	@	CMP@	AX,WA0^P3C^P4C;
	@	MOV@	AL,0;
	@	JZ@	@$+4;
	@	MOV@	AL,1;
	@	MOV@	BA0^P1C^P2C,AL;
:$$=!$$;
	@	MOV@	AL,BA0^P3C^P4C;
	@	NOT@	AL;
	@	AND@	AL,1;
	@	MOV@	BA0^P1C^P2C,AL;
:ASSOCIATE FILE $$($$) WITH I$$ RETURN $$;
	@	MOV@	BL,BA0^P3C^P4C;
	@	MOV@	BH,0;
	@	LEA@	DI,BA0^P1C^P2C[BX];
	@	MOV@	SI,OFFSET BA0^P7C^P8C;
	@	MOV@	BX,OFFSET WA0^P5C^P6C;
	@	CALL@	ASSOC;
:;
